package modelo;
import java.util.LinkedList;


public class Expediente {
	
	private LinkedList<Trabajo> trabajos;
	private int codigoUltimoTrabajo;
	private Herramientas herramientas;
	
	
	public Expediente(){
		
		this.herramientas = new Herramientas();
		this.trabajos = new LinkedList<Trabajo>();
	}
	
	public boolean  existeTrabajo(float codigo){
		
				
		for ( Trabajo unTrabajo: this.trabajos)
			if (unTrabajo.getCodigoTrabajo() == codigo){
				return true;
			}
		
		return false;
		
	}
	
	public LinkedList<Trabajo> getTrabajos(){
		
		return this.trabajos;
	}
	
	public void agregarTrabajo(Trabajo unTrabajo){
		
		this.trabajos.add(unTrabajo);
	}
	
	public void actualizarUltimoCodigoTrabajo(){
		
		this.codigoUltimoTrabajo +=1;
		
	}
	
	public void desactualizarUltimoCodigoTrabajo(){
		
		this.codigoUltimoTrabajo -=1;
	}
	
	public boolean cargarTrabajo(Cliente unCliente,String descripcion,String fechaRealizacion){
				
		Trabajo nuevoTrabajo = new Trabajo();
		
		//Fecha correcta, valida.
		if (herramientas.isDate(fechaRealizacion)){
			this.actualizarUltimoCodigoTrabajo();
			nuevoTrabajo.AltaNuevoTrabajo(this.codigoUltimoTrabajo,unCliente,descripcion,fechaRealizacion);
			this.agregarTrabajo(nuevoTrabajo);
			return true;
		}
				
		return false;
	}
	
	public LinkedList<Trabajo> trabajosDeunaFecha(String fecha){
		
		LinkedList<Trabajo> resultados= new LinkedList<Trabajo>();
		
		for(Trabajo unTrabajo : this.trabajos)
           if (unTrabajo.getFechaRealizacion() == fecha)
        	   resultados.add(unTrabajo);
			
		return resultados;
	}
	
	
	
	public LinkedList<Trabajo> trabajosDeLosProximosDias(){
		
		LinkedList<Trabajo> resultados= new LinkedList<Trabajo>();
		
		for(Trabajo unTrabajo : this.trabajos){
			if(herramientas.fechaDentroDeLaSemana(unTrabajo.getFechaRealizacion()))
				resultados.add(unTrabajo);
		}
		
	return resultados;	
	}	
	
	
	public boolean codigoValido(int codigo){
		
		for(Trabajo unTrabajo : this.trabajos){
			if(unTrabajo.getCodigoTrabajo() == codigo)
				 return true;
		}
		
		return false;
		
	}
	
	public Trabajo obtenerTrabajo(int codigo){
	
		Trabajo encontrado = null;
		for(Trabajo unTrabajo : this.trabajos){
			if(unTrabajo.getCodigoTrabajo() == codigo)
				 encontrado = unTrabajo;
		}
		
		return encontrado;
	
		
	}
	
	public void removerTrabajo(int codigo){
	
		for(Trabajo unTrabajo : this.trabajos)
	           if (unTrabajo.getCodigoTrabajo() == codigo){
	        	   trabajos.remove(unTrabajo);
	        	   break;
	           }
				
	}
	
	public void removerTrabajosDeUnCliente(String nombre){
		
		LinkedList<Trabajo> lista = new LinkedList<Trabajo>();
		for(Trabajo unTrabajo : this.trabajos)
	           if (unTrabajo.getCliente().getNombre() != nombre){
	        	    lista.add(unTrabajo);
	        	  
	           }
		
		this.trabajos = lista;
	}
	
	public boolean confirmarTrabajo(int codigo){
	
		for(Trabajo unTrabajo : this.trabajos)
	           if (unTrabajo.getCodigoTrabajo() == codigo){
	        	   unTrabajo.cambiarEstado();
	        	   return true;
	           }
		
		return false;
	}
	
	public boolean confirmarTrabajo(int codigo, String comentario){
		
		for(Trabajo unTrabajo : this.trabajos)
	           if (unTrabajo.getCodigoTrabajo() == codigo){
	        	   unTrabajo.cambiarEstado();
	        	   unTrabajo.cambiarEstado(comentario);
	        	   return true;
	           }
		
		return false;
	}
	
}
